/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.foxinline.modelo;

import br.com.foxinline.enums.Nacionalidade;
import br.com.foxinline.enums.RacaCor;
import br.com.foxinline.enums.Sexo;
import br.com.foxinline.enums.SituacaoConjugal;
import br.com.foxinline.validador.CPF;
import br.com.foxinline.validador.Email;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;

/**
 *
 * @author ely
 */
@Entity
public class Cidadao implements Serializable {

    @Id
    @SequenceGenerator(sequenceName = "seq_cidadao", name = "seq_cidadao", allocationSize = 1)
    @GeneratedValue(generator = "seq_cidadao", strategy = GenerationType.SEQUENCE)
    private Long id;
    private String nome;
    private String numeroCartaoSus;
    private String apelido;
    @Enumerated(EnumType.STRING)
    private Sexo sexo;
    @Enumerated(EnumType.STRING)
    private RacaCor racaCor;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dataNascimento;
    private Integer pisPasep;
    private String nomeMae;
    @Enumerated(EnumType.STRING)
    private Nacionalidade nacionalidade;
    private String paisNascimento;
    private String telefone;
    @OneToOne
    private Cidade municipioNascimento;
    @Email
    private String email;
    @Enumerated(EnumType.STRING)
    private SituacaoConjugal situacaoConjugal;
    private String ocupacao;
    private String localTrabalho;
    @CPF
    private String cpf;
    private String rg;
    private String orgaoEmissor;
    private Boolean ativo = true;
    @Version
    private int versao;

    public Cidadao() {
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getApelido() {
        return apelido;
    }

    public void setApelido(String apelido) {
        this.apelido = apelido;
    }

    public Sexo getSexo() {
        return sexo;
    }

    public void setSexo(Sexo sexo) {
        this.sexo = sexo;
    }

    public RacaCor getRacaCor() {
        return racaCor;
    }

    public void setRacaCor(RacaCor racaCor) {
        this.racaCor = racaCor;
    }

    public Date getDataNascimento() {
        return dataNascimento;
    }

    public void setDataNascimento(Date dataNascimento) {
        this.dataNascimento = dataNascimento;
    }

    public Integer getPisPasep() {
        return pisPasep;
    }

    public void setPisPasep(Integer pisPasep) {
        this.pisPasep = pisPasep;
    }

    public String getNomeMae() {
        return nomeMae;
    }

    public void setNomeMae(String nomeMae) {
        this.nomeMae = nomeMae;
    }

    public Nacionalidade getNacionalidade() {
        return nacionalidade;
    }

    public void setNacionalidade(Nacionalidade nacionalidade) {
        this.nacionalidade = nacionalidade;
    }

    public String getPaisNascimento() {
        return paisNascimento;
    }

    public void setPaisNascimento(String paisNascimento) {
        this.paisNascimento = paisNascimento;
    }

    public String getTelefone() {
        return telefone;
    }

    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }

    public Cidade getMunicipioNascimento() {
        return municipioNascimento;
    }

    public void setMunicipioNascimento(Cidade municipioNascimento) {
        this.municipioNascimento = municipioNascimento;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public SituacaoConjugal getSituacaoConjugal() {
        return situacaoConjugal;
    }

    public void setSituacaoConjugal(SituacaoConjugal situacaoConjugal) {
        this.situacaoConjugal = situacaoConjugal;
    }

    public String getOcupacao() {
        return ocupacao;
    }

    public void setOcupacao(String ocupacao) {
        this.ocupacao = ocupacao;
    }

    public String getLocalTrabalho() {
        return localTrabalho;
    }

    public void setLocalTrabalho(String localTrabalho) {
        this.localTrabalho = localTrabalho;
    }

    public String getCpf() {
        return cpf;
    }

    public void setCpf(String cpf) {
        this.cpf = cpf;
    }

    public String getRg() {
        return rg;
    }

    public void setRg(String rg) {
        this.rg = rg;
    }

    public String getOrgaoEmissor() {
        return orgaoEmissor;
    }

    public void setOrgaoEmissor(String orgaoEmissor) {
        this.orgaoEmissor = orgaoEmissor;
    }

    public Boolean getAtivo() {
        return ativo;
    }

    public void setAtivo(Boolean ativo) {
        this.ativo = ativo;
    }

    public int getVersao() {
        return versao;
    }

    public void setVersao(int versao) {
        this.versao = versao;
    }

    public String getNumeroCartaoSus() {
        return numeroCartaoSus;
    }

    public void setNumeroCartaoSus(String numeroCartaoSus) {
        this.numeroCartaoSus = numeroCartaoSus;
    }

    @Override
    public int hashCode() {
        int hash = 5;
        hash = 67 * hash + (this.id != null ? this.id.hashCode() : 0);
        hash = 67 * hash + (this.nome != null ? this.nome.hashCode() : 0);
        hash = 67 * hash + (this.apelido != null ? this.apelido.hashCode() : 0);
        hash = 67 * hash + (this.sexo != null ? this.sexo.hashCode() : 0);
        hash = 67 * hash + (this.racaCor != null ? this.racaCor.hashCode() : 0);
        hash = 67 * hash + (this.dataNascimento != null ? this.dataNascimento.hashCode() : 0);
        hash = 67 * hash + (this.pisPasep != null ? this.pisPasep.hashCode() : 0);
        hash = 67 * hash + (this.nomeMae != null ? this.nomeMae.hashCode() : 0);
        hash = 67 * hash + (this.nacionalidade != null ? this.nacionalidade.hashCode() : 0);
        hash = 67 * hash + (this.paisNascimento != null ? this.paisNascimento.hashCode() : 0);
        hash = 67 * hash + (this.telefone != null ? this.telefone.hashCode() : 0);
        hash = 67 * hash + (this.municipioNascimento != null ? this.municipioNascimento.hashCode() : 0);
        hash = 67 * hash + (this.email != null ? this.email.hashCode() : 0);
        hash = 67 * hash + (this.situacaoConjugal != null ? this.situacaoConjugal.hashCode() : 0);
        hash = 67 * hash + (this.ocupacao != null ? this.ocupacao.hashCode() : 0);
        hash = 67 * hash + (this.localTrabalho != null ? this.localTrabalho.hashCode() : 0);
        hash = 67 * hash + (this.cpf != null ? this.cpf.hashCode() : 0);
        hash = 67 * hash + (this.rg != null ? this.rg.hashCode() : 0);
        hash = 67 * hash + (this.orgaoEmissor != null ? this.orgaoEmissor.hashCode() : 0);
        hash = 67 * hash + (this.ativo != null ? this.ativo.hashCode() : 0);
        hash = 67 * hash + (this.numeroCartaoSus != null ? this.numeroCartaoSus.hashCode() : 0);
        hash = 67 * hash + this.versao;
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Cidadao other = (Cidadao) obj;
        if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
            return false;
        }
        if (this.numeroCartaoSus != other.numeroCartaoSus && (this.numeroCartaoSus == null || !this.numeroCartaoSus.equals(other.numeroCartaoSus))) {
            return false;
        }
        if ((this.nome == null) ? (other.nome != null) : !this.nome.equals(other.nome)) {
            return false;
        }
        if ((this.numeroCartaoSus == null) ? (other.numeroCartaoSus != null) : !this.numeroCartaoSus.equals(other.numeroCartaoSus)) {
            return false;
        }
        if ((this.apelido == null) ? (other.apelido != null) : !this.apelido.equals(other.apelido)) {
            return false;
        }
        if (this.sexo != other.sexo) {
            return false;
        }
        if (this.racaCor != other.racaCor) {
            return false;
        }
        if (this.dataNascimento != other.dataNascimento && (this.dataNascimento == null || !this.dataNascimento.equals(other.dataNascimento))) {
            return false;
        }
        if (this.pisPasep != other.pisPasep && (this.pisPasep == null || !this.pisPasep.equals(other.pisPasep))) {
            return false;
        }
        if ((this.nomeMae == null) ? (other.nomeMae != null) : !this.nomeMae.equals(other.nomeMae)) {
            return false;
        }
        if (this.nacionalidade != other.nacionalidade) {
            return false;
        }
        if ((this.paisNascimento == null) ? (other.paisNascimento != null) : !this.paisNascimento.equals(other.paisNascimento)) {
            return false;
        }
        if ((this.telefone == null) ? (other.telefone != null) : !this.telefone.equals(other.telefone)) {
            return false;
        }
        if (this.municipioNascimento != other.municipioNascimento && (this.municipioNascimento == null || !this.municipioNascimento.equals(other.municipioNascimento))) {
            return false;
        }
        if ((this.email == null) ? (other.email != null) : !this.email.equals(other.email)) {
            return false;
        }
        if (this.situacaoConjugal != other.situacaoConjugal) {
            return false;
        }
        if ((this.ocupacao == null) ? (other.ocupacao != null) : !this.ocupacao.equals(other.ocupacao)) {
            return false;
        }
        if ((this.localTrabalho == null) ? (other.localTrabalho != null) : !this.localTrabalho.equals(other.localTrabalho)) {
            return false;
        }
        if ((this.cpf == null) ? (other.cpf != null) : !this.cpf.equals(other.cpf)) {
            return false;
        }
        if ((this.rg == null) ? (other.rg != null) : !this.rg.equals(other.rg)) {
            return false;
        }
        if ((this.orgaoEmissor == null) ? (other.orgaoEmissor != null) : !this.orgaoEmissor.equals(other.orgaoEmissor)) {
            return false;
        }
        if (this.ativo != other.ativo && (this.ativo == null || !this.ativo.equals(other.ativo))) {
            return false;
        }
        if (this.versao != other.versao) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "Cidadao{" + "id=" + id + ", numeroCartaoSus=" + numeroCartaoSus + ", nome=" + nome + ", apelido=" + apelido + ", sexo=" + sexo + ", racaCor=" + racaCor + ", dataNascimento=" + dataNascimento + ", pisPasep=" + pisPasep + ", nomeMae=" + nomeMae + ", nacionalidade=" + nacionalidade + ", paisNascimento=" + paisNascimento + ", telefone=" + telefone + ", municipioNascimento=" + municipioNascimento + ", email=" + email + ", situacaoConjugal=" + situacaoConjugal + ", ocupacao=" + ocupacao + ", localTrabalho=" + localTrabalho + ", cpf=" + cpf + ", rg=" + rg + ", orgaoEmissor=" + orgaoEmissor + ", ativo=" + ativo + ", versao=" + versao + '}';
    }
}
